环境准备

OpenStack 单机部署 —— Kolla-Ansible 的基础上,改用本地镜像仓库,从源码构建镜像并部署 OpenStack all-in-one。

部署本地仓库 Docker Registry

kolla-ansible -i all-in-one bootstrap-servers 会改变 docker 的网络配置,需要删除桥接配置,即启用桥接,否则构建镜像的过程中无法下载依赖库。

另外,还可以添加国内的镜像源,最终 /etc/docker/daemon.json 配置文件的内容如下:

  • 假设本机 ip 为 10.1.0.240
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"registry-mirrors": [
"http://hub-mirror.c.163.com"
],
"insecure-registries": [
"10.1.0.240:4000"
],
"iptables": false,
"log-opts": {
"max-file": "5",
"max-size": "50m"
}
}

修改配置文件后需要重启 docker 服务。

1
2
3
4
5
6
7
8
9
10
# docker 网络配置
sudo vim /etc/docker/daemon.json
# 删除 bridge: "none"

# 重启 docker 服务
sudo service docker restart

# 将当前用户加入 docker 用户组
sudo usermod -aG docker $USER
newgrp docker

运行本地镜像仓库,由于 Keystone 使用了 5000 端口,因此这里指定映射到 4000 端口。

1
2
3
4
5
6
7
# 本地镜像仓库
docker run -d \
--name registry \
--restart=always \
-p 4000:5000 \
-v registry:/var/lib/registry \
registry:2

使用本地仓库

使用 tox 创建配置文件

1
2
3
4
5
6
7
8
9
# 安装 tox
pip install tox

# 生成配置文件
cd kolla
tox -e genconfig

# 拷贝配置文件
sudo cp etc/kolla/kolla-build.conf /etc/kolla/

下载 Keystone 源码,指定 Victoria 版本

1
2
3
# 下载源码
cd
git clone https://github.com/openstack/keystone.git --branch stable/victoria --single-branch

修改配置文件,假设本机 ip 为 10.1.0.240

1
2
3
4
5
6
7
8
9
10
# 配置源码路径
sudo vim /etc/kolla/kolla-build.conf
#[DEFAULT]
#base = ubuntu
#network_mode = host
#push = true
#registry = 10.1.0.240:4000
#[keystone-base]
#type = local
#location = /home/jck/keystone

构建镜像,使用 &> 将输出重定向到文件中

1
2
3
4
5
6
7
8
9
10
11
# 源码构建 Keystone 镜像
kolla-build -t source --config-file /etc/kolla/kolla-build.conf keystone &> keystone-build.txt

# 列出镜像
docker images

# 查看本地仓库
curl -X GET 10.1.0.240:4000/v2/_catalog

# 查看标签
curl -X GET 10.1.0.240:4000/v2/<repository>/tags/list

修改配置文件,这里的 openstack_release 有要求(随便填会出错)

  • 根据构建的镜像标签填入,需要指定 registry 中存在的标签
1
2
3
4
# 使用本地仓库
sudo vim /etc/kolla/globals.yml
#docker_registry: 10.1.0.240:4000
#openstack_release: "12.1.0"

构建完毕后,使用新镜像更新当前环境

  • 注意:依赖的基础镜像也需要 push 到本地镜像仓库,并打上对应的标签(例如 fluentd)
1
2
3
4
5
6
7
8
# 打标签
docker tag kolla/ubuntu-source-fluented:victoria 10.1.0.240:4000/kolla/ubuntu-source-fluented:12.1.0

# push 到本地镜像仓库
docker push 10.1.0.240:4000/kolla/ubuntu-source-fluented:12.1.0

# 更新
kolla-ansible upgrade

其他

kolla-ansible 相关操作

1
2
3
4
5
6
7
8
9
10
11
# 删除容器
kolla-ansible/tools/cleanup-containers

# 删除所有镜像
kolla-ansible/tools/cleanup-images --all

# 拉取镜像
kolla-ansible pull

# 更新环境
kolla-ansible upgrade

相关文件

1
2
3
4
5
6
7
8
9
10
# dockerfile 相关
~/kolla/docker # jinjia2 模板文件
/etc/kolla # 镜像配置文件

# 配置文件
/etc/kolla/kolla-build.conf
/etc/kolla/globals.yml

# 日志文件
/var/log/kolla/ # 链接 /var/lib/docker/volumes/kolla_logs/_data/

清除容器重新部署,通常不用 ./kolla-ansibletools/cleanup-host

1
2
3
4
./kolla-ansible/tools/cleanup-containers
kolla-ansible -i ./all-in-one prechecks
kolla-ansible -i ./all-in-one deploy
kolla-ansible post-deploy

问题与解决

nova-compute 注册失败

查看日志信息说是连接不上 libvirt

配置并重启 libvirt

1
2
3
4
5
6
7
8
9
10
sudo vim /etc/libvirt/libvirtd.conf
#listen_tls = 0
#listen_tcp = 1
#auth_tcp = "none"
#tcp_port = "16509"

systemctl restart libvirtd
#sudo chmod -R 777 /var/run/libvirt

ps aux | grep libvirtd

重新部署

1
2
3
4
5
6
7
8
# 删除容器
kolla-ansible/tools/cleanup-containers

# 部署
kolla-ansible -i ./all-in-one deploy

# 重新生成认证文件
kolla-ansible post-deploy

不安装和配置 libvirt,且 /etc/kolla/globals.yml 也不配置 nova_compute_virt_type 也能正常执行。

安装完毕后注释该配置,重新 upgrade 正常,不注释貌似也行(玄学)。

官方指出,由于技术原因,配置 qemu 后使用 kolla-ansible upgrade 可能出错。

数据库迁移出错

尝试多次无果,回退快照后执行 kolla-ansible upgrade 没有遇到该问题,清除后重新部署应该也可以。

1
ERROR keystone migrate.exceptions.InvalidRepositoryError: /var/lib/kolla/venv/lib/python3.8/site-packages/keystone/common/sql/migrate_repo

请求超时

再次执行 kolla-ansible upgrade 没有再遇到该问题。实验过程中发现时不时就会请求超时,通常就重复执行指令,再不行就清除后重新部署。

参阅